﻿using System;

namespace LM.Tela.Desktop.Formularios
{
    using LM.InterfacesFabricas.DTOs;
    using LM.InterfacesFabricas.Fabricas;
    using LM.InterfacesFabricas.Interfaces.Servicos;
    using System.Collections.Generic;
    using System.Globalization;

    public partial class frmGaragem 
    {
        public frmGaragem()
        {
            InitializeComponent();
        }

        private void LimpeCamposEdicao()
        {
            txtCodigo.Text = string.Empty;
            txtNome.Text = string.Empty;
            txtCNPJ.Text = string.Empty;
            txtInscricaoMunicipal.Text = string.Empty;
        }

        private void btnSalvar_Click(object sender, EventArgs e)
        {
            int codigo;
            int.TryParse(txtCodigo.Text, out codigo);
            var garagem = new DtoGaragem { Codigo = codigo, Nome = txtNome.Text, CNPJ = txtCNPJ.Text, InscricaoMunicipal = txtInscricaoMunicipal.Text };

            var servicoDeGaragem = FabricaGenerica.Crie<IServicoDeGaragem>();
            if (!EmEdicao())
            {
                servicoDeGaragem.Cadastre(garagem);
            }
            else
            {
                servicoDeGaragem.Atualize(garagem);
            }

            PrepareTelaParaNovoRegistro();
        }

        private bool EmEdicao()
        {
            return !string.IsNullOrWhiteSpace(txtCodigo.Text) && txtCodigo.Enabled == false;
        }

        private void CarregueItensJaCadastrados()
        {
            var servicoDeGaragem = FabricaGenerica.Crie<IServicoDeGaragem>();
            var garagens = servicoDeGaragem.ConsulteTodos();

            gridDados.DataSource = garagens;
        }

        private void PrepareTelaParaNovoRegistro()
        {
            LimpeCamposEdicao();
            CarregueItensJaCadastrados();
            txtCodigo.Enabled = true;
            txtCodigo.Focus();
        }

        private void btnNovo_Click(object sender, EventArgs e)
        {
            PrepareTelaParaNovoRegistro();
        }

        private void btnExcluir_Click(object sender, EventArgs e)
        {
            if (!EmEdicao())
            {
                this.ExibaInconsistencia("Garagem não selecionada para edição.");
            }
            else
            {
                var servicoDeGaragem = FabricaGenerica.Crie<IServicoDeGaragem>();
                servicoDeGaragem.Exclua(int.Parse(txtCodigo.Text));

                PrepareTelaParaNovoRegistro();
            }
        }

        private void gridDados_CellDoubleClick(object sender, System.Windows.Forms.DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0)
            {
                var garagem = ((IList<DtoGaragem>)gridDados.DataSource)[e.RowIndex];

                txtCodigo.Text = garagem.Codigo.ToString(CultureInfo.InvariantCulture);
                txtCodigo.Enabled = false;
                txtNome.Text = garagem.Nome;
                txtCNPJ.Text = garagem.CNPJ;
                txtInscricaoMunicipal.Text = garagem.InscricaoMunicipal;
            }
        }

        private void frmGaragem_Load(object sender, EventArgs e)
        {
            CarregueItensJaCadastrados();
        }
    }
}
